AWS ParallelCluster 既存クラスターを pcluster update-cluster コマンドで設定を変更する手順
AWS ParallelCluster 3 のアップデートが許可されている設定項目を変更し、既存のクラスターに対して設定を反映させるための作業手順を紹介します。
本検証にあったては以下のクラスターを元に動作確認を行いました。
項目 | 値 |
---|---|
ParallelCluster | 3.1.4 |
OS | Ubuntu 20.04 |
CPU | Intel |
HeadNode | t3.micro |
ParallelCluster アップデート方法まとめ
変更対象のクラスター名を確認。
pcluster list-clusters | jq -r '.clusters[] | [.clusterName,.version,.region] | @tsv'
クラスター名を変数に入れる。
CLUSTER_NAME=hoge
コンピュートフリートを停止しSTOPPED
表示を確認する。
pcluster update-compute-fleet --cluster-name ${CLUSTER_NAME} --status STOP_REQUESTED while true; do pcluster describe-cluster --cluster-name ${CLUSTER_NAME} | jq -r .computeFleetStatus;sleep 3; done
コンフィグファイルを指定してクラスターをアップデートしUPDATE_COMPLETE
表示を確認する。
pcluster update-cluster --cluster-name ${CLUSTER_NAME} \ --cluster-configuration cluster-slumdb.yml while true; do pcluster describe-cluster --cluster-name ${CLUSTER_NAME} | jq -r .clusterStatus; sleep 3; done
コンピュートフリートを開始しRUNNING
表示を確認する。
pcluster update-compute-fleet --cluster-name ${CLUSTER_NAME} --status START_REQUESTED while true; do pcluster describe-cluster --cluster-name ${CLUSTER_NAME} | jq -r .computeFleetStatus;sleep 3; done
前提知識
クラスターの設定変更する前にコンピュートフリートを停止の状態にする必要があります。コンピュートフリートの停止はヘッドノード(EC2 インスタンス)を停止することではありません。
コンピュートフリートとは
コンピュートフリートとはコンピュートノードの集まりのことを指しています。ParallelCluster で登場する EC2 インスタンスは大きく分けるとヘッドノードと、コンピュートノードの2種類あります。
ヘッドノードはジョブ管理をする EC2 インスタンスです。ユーザーからのジョブを受け付け計算リソースへ適切な割当を行いクラスターの管理をするのが役割です。
コンピュートノードは計算処理を実行する EC2 インスタンスです。ジョブスケジューラーにジョブがサブミットされるとヘッドノードからの指示で自動的に起動し計算処理を行い、計算が終わると終了(削除)されるインスタンス達です。
クラスターの設定変更する条件としてコンピュートノード達(コンピュートフリート)を利用できない状態にする必要があります。クラスターの設定変更でクラスター自体に処理更新かけている最中に計算処理を実行できないようになどの理由があるものかと思われます。
ParallelCluster 設定変更手順
前提事項として変更対象のクラスターのヘッドノードが起動している必要があります。ヘッドノードの停止状態だとこの先実行するコンピュートフリートの停止・開始コマンドが処理されません。
クラスター名の確認
更新対象のクラスター名を確認します。pcluster list-clusters
コマンドで名前を確認します。クラスターが複数台あるときは対象を誤らないように注意してください。
pcluster list-clusters | jq -r '.clusters[] | [.clusterName,.version,.region] | @tsv'
今回は例としてクラスター名 test-slumdb-cluster
の設定を変更しクラスターの更新かけます。
test-centos-cluster 3.1.4 ap-northeast-1 test-slumdb-cluster 3.1.4 ap-northeast-1
この先、クラスター名の指定が頻出するため変数に入れます。
CLUSTER_NAME=test-slumdb-cluster
補足 コンピュートフリートの状態
クラスターを起動すると通常コンピュートフリートは RUNNING
状態です。
pcluster describe-cluster --cluster-name ${CLUSTER_NAME} | jq -r .computeFleetStatus
RUNNING
ちなみにコンピュートフリートの状態は DynamoDB で管理されています。
コンピュートフリートの停止
コンピュートフリートの状態を停止に変更するコマンドを実行します。
pcluster update-compute-fleet --cluster-name ${CLUSTER_NAME} --status STOP_REQUESTED
{ "status": "STOP_REQUESTED", "lastStatusUpdatedTime": "2022-06-07T00:08:46.231Z" }
コンピュートフリートの状態が STOP_REQUESTED
から STOPPED
になるのを待ちます。10秒も掛からずに状態が変わるはずです。
while true; do pcluster describe-cluster --cluster-name ${CLUSTER_NAME} | jq -r .computeFleetStatus;sleep 3; done
STOPPED
の表示を確認できればコンピュートフリート停止作業の完了です。
STOP_REQUESTED STOP_REQUESTED STOP_REQUESTED STOPPED
これでクラスターの設定変更が可能な状態になりました。
補足 ヘッドノードからコンピュートノードを確認
コンピュートフリートを停止状態でヘッドノードから Slurm パーティションの状態を確認します。 inact
と表示され、コンピュートノードが利用できない状態になっています。通常は up
と表示されます。
$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST debug* inact infinite 10 idle~ debug-dy-debug-[1-10] large inact infinite 10 idle~ large-dy-large-[1-10]
クラスターの設定変更(アップデート)
設定変更したコンフィグを引数にしてpclsuter update-cluster
コマンドを実行します。今回指定した ParallelCluster のコンフィグファイル名はcluster-sludb.yml
です。
pcluster update-cluster --cluster-name ${CLUSTER_NAME} \ --cluster-configuration cluster-slumdb.yml
ParallelCluster のクラスターは CDK(Cloudformation)で管理されておりチェンジセットの結果が返ってきます。設定の変更内容は長いため折りたたみました。今回は新しいパーテションを追加したコンフィグで更新かけています。
折りたたみ
{ "cluster": { "clusterName": "test-slumdb-cluster", "cloudformationStackStatus": "UPDATE_IN_PROGRESS", "cloudformationStackArn": "arn:aws:cloudformation:ap-northeast-1:0123456789012:stack/test-slumdb-cluster/142d3320-de71-11ec-96f0-0e9102632057", "region": "ap-northeast-1", "version": "3.1.4", "clusterStatus": "UPDATE_IN_PROGRESS" }, "changeSet": [ { "parameter": "Scheduling.SlurmQueues", "requestedValue": { "Name": "large2", "ComputeResources": [ { "Name": "large", "InstanceType": "c6i.large", "MinCount": 0, "MaxCount": 10, "DisableSimultaneousMultithreading": true } ], "ComputeSettings": { "LocalStorage": { "RootVolume": { "Size": 35, "Encrypted": false, "VolumeType": "gp3", "Iops": 3000, "Throughput": 125 } } }, "CapacityType": "SPOT", "Networking": { "SubnetIds": [ "subnet-035be95eeaa091603" ], "PlacementGroup": { "Enabled": true } }, "Iam": { "S3Access": [ { "BucketName": "hpc-dev-postinstall-files", "EnableWriteAccess": false } ], "AdditionalIamPolicies": [ { "Policy": "arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore" } ] } } } ] }
クラスターの状態が UPDATE_IN_PROGRESS
から UPDATE_COMPLETE
になるのを待ちます。待ち時間は変更内容に依りますが5〜10分程度はみておきましょう。
while true; do pcluster describe-cluster --cluster-name ${CLUSTER_NAME} | jq -r .clusterStatus; sleep 3; done
UPDATE_COMPLETE
の表示を確認できればクラスター設定更新の完了です。
UPDATE_IN_PROGRESS UPDATE_IN_PROGRESS UPDATE_IN_PROGRESS UPDATE_COMPLETE
これでクラスターの設定変更が完了しました。
コンピュートフリートの開始
コンピュートフリートの状態を開始に変更するコマンドを実行します。
pcluster update-compute-fleet --cluster-name ${CLUSTER_NAME} --status START_REQUESTED
{ "status": "START_REQUESTED", "lastStatusUpdatedTime": "2022-06-07T00:44:35.409Z" }
コンピュートフリートの状態が START_REQUESTED
から RUNNING
になるのを待ちます。10秒も掛からずに状態が変わるはずです。
while true; do pcluster describe-cluster --cluster-name ${CLUSTER_NAME} | jq -r .computeFleetStatus;sleep 3; done
RUNNING
の表示を確認できればコンピュートフリート開始作業の完了です。
START_REQUESTED START_REQUESTED START_REQUESTED RUNNING
補足 ヘッドノードからコンピュートノードを確認
ヘッドノードから Slurm パーティションの状態を確認すると up
と表示され、コンピュートノードが利用可能な状態に戻りました。
$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST debug* up infinite 10 idle~ debug-dy-debug-[1-10] large up infinite 10 idle~ large-dy-large-[1-10] large2 up infinite 10 idle~ large2-dy-large-[1-10]
クラスター設定変更の結果確認
今回は新しいパーティション(large2
)を追加する更新を行いました。sinfo
コマンドで確認するとlarge2
というパーティションを確認できました。
$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST debug* up infinite 10 idle~ debug-dy-debug-[1-10] large up infinite 10 idle~ large-dy-large-[1-10] large2 up infinite 10 idle~ large2-dy-large-[1-10]
既存のクラスターに追加した設定ファイルの内容を反映することができました。
まとめ
ParallelCluster のクラスターの設定を変更するには以下のステップを踏みます。
- コンピュートフリートを停止
- クラスターのアップデートを実行
- コンピュートフリートを開始(元の状態に戻す)
おわりに
クラスターにはアップデートできる設定項目、できない設定項目があります。アップデートを計画する前にアップデートできる設定項目を先にご確認ください。
Configuration files - AWS ParallelCluster
各設定項目ごとにアップデートポリシーが明記されています。